from flask import current_app, g
from flask import render_template
from flask import request, jsonify
from flask import session, redirect, url_for

from info.models import User
from info.utils.response_code import RET

from . import admin_blue
from info.utils.commons import login_required


@admin_blue.route('/indes')
@login_required
def index():
    '''
    新闻主页
    1、获取用户信息
    2、返回模板数据
    :return:
    '''
    user = g.user
    data = {
        'user': user
    }
    return render_template('admin/index.html', data=data)


@admin_blue.route('/login', methods=['GET', 'POST'])
def admin_login():
    '''
    后台管理员登录
    GET和POST两种请求方式：
        GET：访问登录页面
        POST：登录
    GET请求：
        返回模板数据
    POST请求：
        1、获取参数
        2、验证参数完整性
        3、根据输入的用户名查询数据库
        4、判断查询结果
        5、缓存管理员信息
        6、重定向到后台首页(如果用render_template直接转到模板，会造成首页url与登录页面相同)
    :return:
    '''
    # 判断请求方式
    if request.method == 'GET':
        return render_template('admin/login.html')
    # post请求
    # 获取参数
    user_name = request.form.get('username')
    password = request.form.get('password')
    # 验证参数完整性
    if not all([user_name, password]):
        return jsonify(errno=RET.PARAMERR, errmsg='参数不完整')
    # 根据用户名查询数据库
    try:
        user = User.query.filter(User.mobile == user_name, User.is_admin == True).first()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='数据库查询错误')
    # 判断查询结果
    if not user or not user.check_password(password):
        return jsonify(errno=RET.PARAMERR, errmsg='用户名或密码错误')
    # 缓存管理员信息
    session['user_id'] = user.id
    session['mobile'] = user.mobile
    session['nick_name'] = user.nick_name
    session['is_admin'] = user.is_admin
    # 重定向到主页
    return redirect(url_for('admin_blue.index'))


@admin_blue.route('/user_count')
def count():
    '''
    用户统计页面
    :return:
    '''
    # 返回模板数据
    data = {

    }
    return render_template('admin/user_count.html', data=data)